package com.zh.work.jy;

import com.alibaba.fastjson.JSONObject;
import com.zh.work.util.jy.AesUtil;
import com.zh.work.util.jy.ClientUtil;
import com.zh.work.util.jy.JYMD5;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: II类A型_V4数字证书，用户授权完成后进行主体信息一致性验证，验证成功后返回数字证书
 * @Author: Liard
 * @Create in: 2020/6/26 15:13
 * @Version: 1.0.1
 */
public class BankCardCheck4 {
    private static final Logger log = LoggerFactory.getLogger(BankCardCheck4.class);

    private static final String strUrl = "https://101.52.254.188:8443/bank/bankCard4Detail/cer";
    private static final String scene_code = "01";
    private static final String pact_no = "FHB20200619_001";
    private static final String strLicense = "E0A1DB9C000DEBF3C51B3F8DA8345E99";
    private static final String strAppsecret = "cbab69be36a27290f975584f74dc8b8e";


    public static void main(String[] args) {
        //系统时间
        String strTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        String sName = "李辉能";
        String sId = "421121199706027019";
        //主体信息校验码：发起证书申请用户主体信息校验码
        String pact_sign = JYMD5.MD5Encoder(sName + sId);
        //主体参数：姓名
        String name = AesUtil.encrypt(sName, strAppsecret);
        //主体参数：身份证号码
        String id = AesUtil.encrypt(sId, strAppsecret);
        //主体参数：银行卡号
        String bank_card = AesUtil.encrypt("6217003110024582817", strAppsecret);
        //预留手机号
        String mobile = AesUtil.encrypt("15919044428", strAppsecret);
        //证件类型，默认“0”身份证，具体类型列表请见接口文档，当前仅支持身份证证件类型。
        String identity_type = "0";
        //业务流水号
        String strSys_req_sn = "bank_card4";
        //C端客户主体信息使用授权协议签署的流水号（通过该流水号要能够定位到签署协议人员），类型String 长度小于40.
        String pact_trade_no = "**协议授权流水号**";
        //媒体信息hash值托管：件证据摘要
        String save_cer = "**证书扩展信息**";

        new BankCardCheck4().doCheck4(strUrl, id, name, bank_card, mobile, identity_type, strSys_req_sn, strTime,
                pact_trade_no, pact_sign, save_cer);
    }


    public void doCheck4(String strUrl, String strId, String strName, String bank_card,
                         String mobile, String identity_type,
                         String strSys_req_sn, String strTime, String pact_trade_no, String pact_sign, String save_cer) {
        try {
            JSONObject param = new JSONObject();
            param.put("name", strName);
            param.put("id_card", strId);
            param.put("bank_card", bank_card);
            param.put("mobile", mobile);
            param.put("identity_type", identity_type);

            JSONObject par = new JSONObject();
            par.put("biz_content", param);
            par.put("license_code", strLicense);
            par.put("sys_req_sn", strSys_req_sn);
            par.put("timestamp", strTime);
            par.put("pact_trade_no", pact_trade_no);
            par.put("pact_sign", pact_sign);
            par.put("scene_code", scene_code);
            par.put("save_cer", save_cer);
            par.put("pact_no", pact_no);
            //信息防篡改签名
            String sign = JYMD5.createSignature(par, strAppsecret);
            par.put("sign", sign);
            par.put("biz_content", param);

            System.out.println(JSONObject.toJSONString(par));
            String result = ClientUtil.post(strUrl,par.toString());
            System.out.println(result);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
